package remote{

	
	import entidades.Avaliacao;
	import entidades.Pedido;
	
	import mx.collections.ArrayCollection;
	import mx.controls.Alert;
	import mx.rpc.AsyncToken;
	import mx.rpc.Responder;
	import mx.rpc.events.FaultEvent;
	import mx.rpc.remoting.mxml.RemoteObject;
	
	public class PedidoRemote {
		
		
		public function buscaAvaliacao( result:Function, pedido:Pedido):void{
			var async:AsyncToken = _remote.buscaAvaliacao(pedido);
			async.addResponder( new Responder( result, defaultFaultHandler ) );
		}
		
		public function aprovarPedido( result:Function):void{
			var async:AsyncToken = _remote.aprovarPedido();
			async.addResponder( new Responder( result, defaultFaultHandler ) );
		}
		
		public function reprovarPedido( result:Function):void{
			var async:AsyncToken = _remote.reprovarPedido();
			async.addResponder( new Responder( result, defaultFaultHandler ) );
		}
		
		public function setRecuperarPed( result:Function, pedido:Pedido ):void{
			var async:AsyncToken = _remote.setRecuperarPed(pedido);
			async.addResponder( new Responder( result, defaultFaultHandler ) );
		}
		
		public function recuperarPed( result:Function ):void{
			var async:AsyncToken = _remote.recuperarPed();
			async.addResponder( new Responder( result, defaultFaultHandler ) );
		}
		
		public function exibirPedido( result:Function ):void{
			var async:AsyncToken = _remote.exibirPedido();
			async.addResponder( new Responder( result, defaultFaultHandler ) );
		}
		
		public function buscarPedido(result:Function, numPedido:Number, idStatus:Number, dtPlanejadaDe:Date, dtPlanejadaAte:Date,
									 dtCriacaoIni:Date, dtCriacaoFim:Date, solicitacao:Number, fornecedor:Number):void{
			var result:Function;
			var async:AsyncToken = _remote.listPedido(numPedido, idStatus, dtPlanejadaDe, dtPlanejadaAte,
				dtCriacaoIni, dtCriacaoFim, solicitacao, fornecedor);
			async.addResponder( new Responder( result, defaultFaultHandler ) );
		}
		
		public function gravarPedido(pedido:Pedido ):void{
			var result:Function;
			var async:AsyncToken = _remote.addPedido(pedido);
			async.addResponder( new Responder( result, defaultFaultHandler ) );
		}
		
		//--------------------setup----------------------------//
		private var _remote:RemoteObject;
		
		public function PedidoRemote(){
			_remote = new RemoteObject();
			_remote.showBusyCursor = true;
			_remote.destination = 'PedidoService';
		}
		
		private function defaultFaultHandler(e:FaultEvent):void{
			Alert.show( "Estamos com problemas no servidor! Tente novamente mais tarde!","Pedido" );
		}
		
		private static var _instance:PedidoRemote;
		public static function getInstance():PedidoRemote{
			if(_instance == null){
				_instance = new PedidoRemote();
			}
			return _instance;
		}
	}
}